package com.example.demo.zaqizabatest.sortalgorithm;

/**
 *
 * 归并排序的思想是将数组分成两部分，分别进行排序，然后归并起来。
 *
 * 归并方法将数组中两个已经排序的部分归并成一个。
 *
 * @ClassName MergeSort
 * @Author lys4134
 * @Date 2021/12/29 09:49:47
 * @Description MergeSort
 * @Version 1.0
 **/
public class MergeBaseSort<T extends Comparable<T>> extends BaseSort<T> {

    protected T[] aux;


    protected void merge(T[] nums, int l, int m, int h) {

        int i = l, j = m + 1;

        for (int k = l; k <= h; k++) {
            aux[k] = nums[k]; // 将数据复制到辅助数组
        }

        for (int k = l; k <= h; k++) {
            if (i > m) {
                nums[k] = aux[j++];

            } else if (j > h) {
                nums[k] = aux[i++];

            } else if (aux[i].compareTo(aux[j]) <= 0) {
                nums[k] = aux[i++]; // 先进行这一步，保证稳定性

            } else {
                nums[k] = aux[j++];
            }
        }
    }

    @Override
    public void sort(T[] nums) {

    }
}